{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "6428e81f",
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "import os\n",
    "import numpy as np\n",
    "from collections import defaultdict\n",
    "from glob import glob\n",
    "from tqdm import tqdm\n",
    "import soundfile as sf\n",
    "import re\n",
    "from multiprocess import Pool\n",
    "import itertools\n",
    "\n",
    "def chunks(l, n):\n",
    "    for i in range(0, len(l), n):\n",
    "        yield (l[i: i + n], i // n)\n",
    "\n",
    "def multiprocessing(strings, function, cores=6, returned=True):\n",
    "    df_split = chunks(strings, len(strings) // cores)\n",
    "    pool = Pool(cores)\n",
    "    pooled = pool.map(function, df_split)\n",
    "    pool.close()\n",
    "    pool.join()\n",
    "\n",
    "    if returned:\n",
    "        return list(itertools.chain(*pooled))\n",
    "\n",
    "timestamps = [i * 0.02 for i in range(1500 + 1)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "6fbb4518",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "efc83d71cffd48388145c88be0ff0958",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "fasttext.ftz:   0%|          | 0.00/227M [00:00<?, ?B/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "(('__label__standard-english',\n",
       "  '__label__local-english',\n",
       "  '__label__standard-malay',\n",
       "  '__label__socialmedia-indonesian',\n",
       "  '__label__local-malay',\n",
       "  '__label__other'),\n",
       " array([9.12180483e-01, 4.69220504e-02, 4.03920077e-02, 5.50693308e-04,\n",
       "        1.30474637e-05, 1.07987826e-05]))"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from huggingface_hub import hf_hub_download\n",
    "import fasttext\n",
    "\n",
    "filename = hf_hub_download(\n",
    "    repo_id=\"mesolitica/fasttext-language-detection-v2\", \n",
    "    filename=\"fasttext.ftz\"\n",
    ")\n",
    "lang_model = fasttext.load_model(filename)\n",
    "lang_model.predict('hello my name', k = 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "76d9ccb0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(('__label__local-malay',\n",
       "  '__label__standard-malay',\n",
       "  '__label__socialmedia-indonesian',\n",
       "  '__label__other'),\n",
       " array([0.69633353, 0.29375371, 0.00906781, 0.00088501]))"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lang_model.predict('hello name saye', k = 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "68fa4d07",
   "metadata": {},
   "outputs": [],
   "source": [
    "def chunk(alignment, reject = -7, minimum_length = 1.0):\n",
    "    alls, temp = [], []\n",
    "    for a in alignment:\n",
    "        if a['score'] <= reject:\n",
    "            if len(temp):\n",
    "                if (temp[-1]['end'] - temp[0]['start']) >= minimum_length:\n",
    "                    temp[-1]['end'] = float(temp[-1]['end']) + 0.1\n",
    "                    alls.append(temp)\n",
    "                temp = []\n",
    "        else:\n",
    "            temp.append(a)\n",
    "            \n",
    "    if len(temp):\n",
    "        if (temp[-1]['end'] - temp[0]['start']) >= minimum_length:\n",
    "            temp[-1]['end'] = float(temp[-1]['end']) + 0.1\n",
    "            alls.append(temp)\n",
    "    return alls"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "5ca8d308",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "3085595it [00:16, 185628.88it/s]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "1961155"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = defaultdict(list)\n",
    "with open('prepared-pseudolabel.jsonl') as fopen:\n",
    "    for no, l in tqdm(enumerate(fopen)):\n",
    "        l = json.loads(l)\n",
    "        data[l['audio_filename']].append((no, l))\n",
    "        \n",
    "len(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "314dc54c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1961155"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rows = list(data.values())\n",
    "len(rows)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "d3633b01",
   "metadata": {},
   "outputs": [],
   "source": [
    "!rm -rf prepared-pseudolabel-chunks\n",
    "!mkdir prepared-pseudolabel-chunks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "8b6107ec",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/lib/python3/dist-packages/scipy/__init__.py:146: UserWarning: A NumPy version >=1.17.3 and <1.25.0 is required for this version of SciPy (detected version 1.26.4\n",
      "  warnings.warn(f\"A NumPy version >={np_minversion} and <{np_maxversion}\"\n"
     ]
    }
   ],
   "source": [
    "from sklearn.feature_extraction.text import CountVectorizer\n",
    "\n",
    "rejected = [\n",
    "    'terima kasih kerana menonton',\n",
    "    'terima kasih',\n",
    "    'thank you for watching',\n",
    "]\n",
    "\n",
    "def loop(data):\n",
    "    data, _ = data\n",
    "    new_data = []\n",
    "    for d in tqdm(data):\n",
    "        \n",
    "        aligns, scores = [], []\n",
    "        for i in d:\n",
    "            f = f'prepared-pseudolabel_alignment/{i[0]}.alignment'\n",
    "            try:\n",
    "                with open(f) as fopen:\n",
    "                    align = json.load(fopen)\n",
    "                    score = np.sum([s['score'] for s in align])\n",
    "                    aligns.append(align)\n",
    "                    scores.append(score)\n",
    "            except:\n",
    "                aligns.append([])\n",
    "                scores.append(-9999)\n",
    "\n",
    "        argmax = np.argmax(scores)\n",
    "        no = d[argmax][0]\n",
    "        text = d[argmax][1]['new_text']\n",
    "        \n",
    "        rt_ = re.sub('[^a-z ]+', '', text.lower()).strip()\n",
    "        if any([s == rt_ for s in rejected]):\n",
    "            continue\n",
    "            \n",
    "        split = text.split()\n",
    "        ones = [w for w in split if len(w) <= 1]\n",
    "        if (len(ones) / len(split)) >= 0.5:\n",
    "            continue\n",
    "            \n",
    "        if any([(len(set(w)) / len(w)) < 0.3 for w in split]):\n",
    "            continue\n",
    "        \n",
    "        try:\n",
    "            dense = CountVectorizer(ngram_range = (3,3)).fit_transform([text]).todense()\n",
    "            repeat = (dense > 3).sum() >= 1\n",
    "            if repeat:\n",
    "                continue\n",
    "        except:\n",
    "            continue\n",
    "            \n",
    "        lang = text.split('<|startoftranscript|><|')[1].split('|')[0]\n",
    "        cleaned_text = re.sub(r\"<\\|.*?\\|>\", \"\", text).strip()\n",
    "        if lang_model.predict(cleaned_text)[0][0] == '__label__english':\n",
    "            predict_lang = 'en'\n",
    "        else:\n",
    "            predict_lang = 'ms'\n",
    "        \n",
    "        chunks = chunk(aligns[argmax])\n",
    "        audio_filename = d[argmax][1]['audio_filename']\n",
    "        if len(chunks):\n",
    "            y, sr = sf.read(audio_filename)\n",
    "            for k, c in enumerate(chunks):\n",
    "                \n",
    "                y_ = y[int(sr * c[0]['start']): int(sr * c[-1]['end'])]\n",
    "                \n",
    "                skip = False\n",
    "                \n",
    "                for c_ in c:\n",
    "                    if (c_['end'] - c_['start']) > 2:\n",
    "                        skip = True\n",
    "                        break\n",
    "                if skip:\n",
    "                    continue\n",
    "                \n",
    "                for no_ in range(len(c)):\n",
    "                    if no_ > 0 and (c[no_]['start'] - c[no_ - 1]['end']) > 1.2:\n",
    "                        skip = True\n",
    "                        break\n",
    "                if skip:\n",
    "                    continue\n",
    "                    \n",
    "                ts = []\n",
    "                \n",
    "                min_t = min([c_['start'] for c_ in c])\n",
    "                \n",
    "                for c_ in c:\n",
    "                    start = min(timestamps, key=lambda t: abs(t - (c_['start'] - min_t)))\n",
    "                    end = min(timestamps, key=lambda t: abs(t - (c_['end'] - min_t)))\n",
    "                    w = c_['text']\n",
    "                    t = f\"<|{start:.2f}|> {w}<|{end:.2f}|>\"\n",
    "                    ts.append(t)\n",
    "                    \n",
    "                new_f = os.path.join('prepared-pseudolabel-chunks', f'{no}-{k}.mp3')\n",
    "                if not os.path.exists(new_f):\n",
    "                    sf.write(new_f, y_, sr)\n",
    "                    \n",
    "                word = ''.join(ts)\n",
    "                word = f\"<|startoftranscript|><|{predict_lang}|><|transcribeprecise|>{word}<|endoftext|>\"\n",
    "                \n",
    "                segments, temp = [], [c[0]]\n",
    "                last_t = c[0]['end']\n",
    "                for c_ in c[1:]:\n",
    "                    if (c_['start'] - last_t) > 0.3:\n",
    "                        segments.append(temp)\n",
    "                        temp = []\n",
    "\n",
    "                    last_t = c_['end']\n",
    "                    temp.append(c_)\n",
    "\n",
    "                if len(temp):\n",
    "                    segments.append(temp)\n",
    "                \n",
    "                ts = []\n",
    "                for s in segments:\n",
    "                    start = min(timestamps, key=lambda t: abs(t - (s[0]['start'] - min_t)))\n",
    "                    end = min(timestamps, key=lambda t: abs(t - (s[-1]['end'] - min_t)))\n",
    "                    w = ' '.join([c_['text'] for c_ in s])\n",
    "                    t = f\"<|{start:.2f}|> {w}<|{end:.2f}|>\"\n",
    "                    ts.append(t)\n",
    "                \n",
    "                ts = ''.join(ts)\n",
    "                new_text = f\"<|startoftranscript|><|{predict_lang}|><|transcribe|>{ts}<|endoftext|>\"\n",
    "                \n",
    "                new_data.append({\n",
    "                    'audio_filename': new_f,\n",
    "                    'word_timestamp': word,\n",
    "                    'segment_timestamp': new_text,\n",
    "                })\n",
    "                \n",
    "    return new_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "5e92c2e7",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|███████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00,  9.52it/s]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "45"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r = loop((rows[:10], 0))\n",
    "len(r)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "85eaa134",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'audio_filename': 'prepared-pseudolabel-chunks/15-3.mp3',\n",
       " 'word_timestamp': '<|startoftranscript|><|ms|><|transcribeprecise|><|0.00|> ada<|0.08|><|0.14|> kefew<|0.30|><|0.40|> juga<|0.56|><|0.78|> zaman?<|0.98|><|1.02|> Ada.<|1.12|><|1.50|> Masih<|1.76|><|1.82|> ada?<|2.04|><|endoftext|>',\n",
       " 'segment_timestamp': '<|startoftranscript|><|ms|><|transcribe|><|0.00|> ada kefew juga zaman? Ada.<|1.12|><|1.50|> Masih ada?<|2.04|><|endoftext|>'}"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r[-6]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "14ce6e53",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "                <audio  controls=\"controls\" >\n",
       "                    <source src=\"data:audio/mpeg;base64,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\" type=\"audio/mpeg\" />\n",
       "                    Your browser does not support the audio element.\n",
       "                </audio>\n",
       "              "
      ],
      "text/plain": [
       "<IPython.lib.display.Audio object>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import IPython.display as ipd\n",
    "ipd.Audio(r[-6]['audio_filename'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "b14d0b09",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 35%|████████████████████████████▏                                                    | 13675/39223 [20:42<35:52, 11.87it/s]IOPub message rate exceeded.\n",
      "The notebook server will temporarily stop sending output\n",
      "to the client in order to avoid crashing it.\n",
      "To change this limit, set the config variable\n",
      "`--NotebookApp.iopub_msg_rate_limit`.\n",
      "\n",
      "Current values:\n",
      "NotebookApp.iopub_msg_rate_limit=1000.0 (msgs/sec)\n",
      "NotebookApp.rate_limit_window=3.0 (secs)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "r = multiprocessing(rows, loop, cores = 50)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "b28a1169",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5.862274"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(r) / 1e6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "8960bfbd",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5862274"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(r)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "118fc62c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "130G\tprepared-pseudolabel-chunks\r\n"
     ]
    }
   ],
   "source": [
    "!du -hs prepared-pseudolabel-chunks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "e709d517",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "                <audio  controls=\"controls\" >\n",
       "                    <source src=\"data:audio/mpeg;base64,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//NoxNAvi7qgBssFrbIYylUZaN+hRIR6PseXTTcBwyIzFTbKZHnNyxjlubwm5Hv6bKt3vy/8O5U/KtmDZrlJDKnbHp6DHKFh2uUMaKoBhEq9h6LMqSHptP8rIsazdUpumtWNFHWZEWQnwu6ejIciSvVLbpkUcN6tF/U22JXJFHOStenmhJ+oaiBX0SfyPEHDmOo4laCcNs0cDeJiay2XY7glCEp04Qkg7W9UvEuWq8xOJOI2LplDXO237gilaSYfDBMonSeRjWzsMyjjKZocHtoUBX0ixERB//N4xNw9w8agpsvHsWtoJFlXi0ZlNMy/n/nv8OC4TowCt4S1n/fV5wDPMNJZisczQnQYg6hrVA1hz4FcIxBDREcKCQYUI6DtIkT+M4SS3VtPw5Ujyelxo5S5wXUrdryjHCpKqWdpJRT1bcvdyH3VWo0lGtYV9nUQUSDLIl8XyVlUUNJgEpoDQ12uk60XgV2nehmXQzUadLpThLn1gSVwc4TlQ/SS6zRYxWpGoVDNNRTOVDYkWpvCWw+/rs0saeJzpQ1m3NOGy1pT1MmgBgL9LBKFOy152mwuI12GnCfqGn++Istr1K1u9KrsZh2ml3KtKAjRYGnJ0/xEpsyl//N4xNQ4sp6cB1nAAD8b1BZgaE4IuCTgE10MsgYLQMBRIBAICwGAhDcEPjE4ES5gGCIzJW4z/CkKj0AiPMHwcAoEmjiXmERMmIYnjghFxRCEhpEF5wTvRhCBYkM71AYDVNmRGsMoGqJbmgQalUAWPGAYCsQQ9EgNXqGACYNCSYVBEZBlkYlkUJALOrmIgKFgIl96HmlMyMPw/MchlMKhtMVgwM6VYTiBxpGCwWBUBkWigDE0DBUAgoALIn6hsynPgUOExKPAQAEYkikODOVABakjaKgC4Tsrwpnegy9S09cLAqYYBOCRACoIGEIJCAI37ctIIqAE8i7EhH7S//OoxOBt7BaiX53pDGFaX1hjFyZm7uHYCMCgXCwGDoDGFITBYPRACJhMDJgKIAFB5pSFKlqPgOAEmAluSsMhfyiduVxF/rTwu1My3luimjBsAjAwNwAB6agWBUCAWggR/XcFADIAGR2gizL5n7WH/z///eGA5fNSyOR2nldyWUlWXysBAMFgTRBDABC4EJ7IDhAA6qqGohARVZHIQAKqrL62WqbKh7MXq2OUxjfv3e3pJAkMSWH4fkkCRiSw/DccikMR+Lw/HJYtVEJkS1kJrIVqo3MiZMkayFkqNzImTI2shZKjdUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//MYxMsAAAP8AcAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\" type=\"audio/mpeg\" />\n",
       "                    Your browser does not support the audio element.\n",
       "                </audio>\n",
       "              "
      ],
      "text/plain": [
       "<IPython.lib.display.Audio object>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import IPython.display as ipd\n",
    "ipd.Audio(r[3000000]['audio_filename'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "3aed344f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'audio_filename': 'prepared-pseudolabel-chunks/1577939-3.mp3',\n",
       " 'word_timestamp': '<|startoftranscript|><|ms|><|transcribeprecise|><|0.00|> sebelum<|0.24|><|0.32|> ni.<|0.36|><|0.66|> Dan<|0.78|><|0.86|> kita<|0.98|><|1.04|> orang<|1.28|><|1.44|> menang<|1.76|><|2.18|> kat<|2.26|><|2.30|> sana<|2.54|><|endoftext|>',\n",
       " 'segment_timestamp': '<|startoftranscript|><|ms|><|transcribe|><|0.00|> sebelum ni.<|0.36|><|0.66|> Dan kita orang menang<|1.76|><|2.18|> kat sana<|2.54|><|endoftext|>'}"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r[3000000]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "24609a08",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "\n",
    "pd.DataFrame(r).to_parquet('pseudolabel-whisper-word-timestamp-chunk.parquet')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "2c72b3ad",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "5c1b09262b164621a79ccbb2a2a66008",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Uploading...:   0%|          | 0.00/1.02G [00:00<?, ?B/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "CommitInfo(commit_url='https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/commit/5f31ce6f101899892e05f79a36ceef20a42ebabc', commit_message='Upload data/malaysian_context_v2-00000-of-00001.parquet with huggingface_hub', commit_description='', oid='5f31ce6f101899892e05f79a36ceef20a42ebabc', pr_url=None, repo_url=RepoUrl('https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper', endpoint='https://huggingface.co', repo_type='dataset', repo_id='mesolitica/Malaysian-STT-Whisper'), pr_revision=None, pr_num=None)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from huggingface_hub import HfApi\n",
    "api = HfApi()\n",
    "api.upload_file(\n",
    "    path_or_fileobj=\"pseudolabel-whisper-word-timestamp-chunk.parquet\",\n",
    "    path_in_repo=\"data/malaysian_context_v2-00000-of-00001.parquet\",\n",
    "    repo_id=\"mesolitica/Malaysian-STT-Whisper\",\n",
    "    repo_type=\"dataset\",\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "85c1761a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5862274"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from glob import glob\n",
    "import os\n",
    "\n",
    "repository = 'mesolitica/Malaysian-STT-Whisper'\n",
    "folder = 'prepared-pseudolabel-chunks'\n",
    "files = glob(f'{folder}/*.mp3')\n",
    "len(files)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "e551022f",
   "metadata": {},
   "outputs": [],
   "source": [
    "import zipfile\n",
    "import time\n",
    "from huggingface_hub import HfFileSystem\n",
    "from huggingface_hub import HfApi\n",
    "from tqdm import tqdm\n",
    "\n",
    "partition_size = 5e+9"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "91e2aa52",
   "metadata": {},
   "outputs": [],
   "source": [
    "def loop(files):\n",
    "    files, index = files\n",
    "    current_index = 0\n",
    "    api = HfApi()\n",
    "    fs = HfFileSystem()\n",
    "    total = 0\n",
    "    temp = []\n",
    "    for i in tqdm(range(len(files))):\n",
    "        s = os.stat(files[i]).st_size\n",
    "        if s + total >= partition_size:\n",
    "            part_name = f\"{folder}-{index}-{current_index}.zip\"\n",
    "                \n",
    "            with zipfile.ZipFile(part_name, 'w', zipfile.ZIP_DEFLATED) as zipf:\n",
    "                for f in temp:\n",
    "                    zipf.write(f, arcname=f)\n",
    "\n",
    "            while True:\n",
    "                try:\n",
    "                    os.system(f'huggingface-cli upload {repository} {part_name} --repo-type=dataset')\n",
    "                    break\n",
    "                except:\n",
    "                    time.sleep(60)\n",
    "\n",
    "            os.remove(part_name)\n",
    "            \n",
    "            current_index += 1\n",
    "            temp = [files[i]]\n",
    "            total = s\n",
    "        else:\n",
    "            temp.append(files[i])\n",
    "            total += s\n",
    "        \n",
    "    if len(temp):\n",
    "        part_name = f\"{folder}-{index}-{current_index}.zip\"\n",
    "\n",
    "        with zipfile.ZipFile(part_name, 'w', zipfile.ZIP_DEFLATED) as zipf:\n",
    "            for f in temp:\n",
    "                zipf.write(f, arcname=f)\n",
    "\n",
    "        while True:\n",
    "            try:\n",
    "                os.system(f'huggingface-cli upload {repository} {part_name} --repo-type=dataset')\n",
    "                break\n",
    "            except:\n",
    "                time.sleep(60)\n",
    "\n",
    "        os.remove(part_name)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "4053a31e",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 37%|███████████████████████████▊                                               | 217567/586227 [00:00<00:00, 449994.75it/s]Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-5-0.zip\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 77%|███████████████████████████████████████████████████████████                  | 450024/586227 [09:22<02:02, 1115.47it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-0-0.zip\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 71%|██████████████████████████████████████████████████████▊                      | 417758/586227 [09:30<02:37, 1072.31it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-4-0.zip\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 40%|███████████████████████████████▍                                              | 236611/586227 [09:29<25:11, 231.29it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-3-0.zip\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 78%|████████████████████████████████████████████████████████████▏                | 458318/586227 [09:31<01:23, 1524.36it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-1-0.zip\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 71%|██████████████████████████████████████████████████████▉                      | 418719/586227 [09:36<02:36, 1067.26it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-7-0.zip\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 70%|██████████████████████████████████████████████████████▎                       | 408266/586227 [09:31<03:58, 745.54it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-2-0.zip\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 78%|███████████████████████████████████████████████████████████▋                 | 454807/586227 [09:31<02:01, 1084.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-8-0.zip\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 56%|███████████████████████████████████████████▎                                  | 325754/586227 [09:37<08:46, 495.18it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-6-0.zip\n",
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-9-0.zip\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 77%|██████████████████████████████████████████████████████████▉                  | 448693/586227 [09:30<02:05, 1096.57it/s]Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-0-1.zip\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████████| 586227/586227 [18:37<00:00, 524.46it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-9-1.zip\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████████| 586227/586227 [18:36<00:00, 524.94it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-4-1.zip\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████████| 586227/586227 [18:49<00:00, 519.12it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-6-1.zip\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████████| 586227/586227 [18:49<00:00, 518.92it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-5-1.zip\n",
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-3-1.zip\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████████| 586227/586227 [18:57<00:00, 515.43it/s]\n",
      "100%|██████████████████████████████████████████████████████████████████████████████| 586227/586227 [18:55<00:00, 516.47it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-7-1.zip\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████████| 586227/586227 [18:56<00:00, 515.70it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-1-1.zip\n",
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-8-1.zip\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████████| 586227/586227 [19:06<00:00, 511.12it/s]\n",
      "100%|██████████████████████████████████████████████████████████████████████████████| 586227/586227 [18:58<00:00, 514.80it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-2-1.zip\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████████| 586227/586227 [19:10<00:00, 509.60it/s]\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n",
      "Uploading files using Xet Storage..\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-0-2.zip\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:00<00:00, 64280.52it/s]\n",
      "Uploading files using Xet Storage..\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-10-0.zip\n",
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-9-2.zip\n",
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-6-2.zip\n",
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-5-2.zip\n",
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-2-2.zip\n",
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-7-2.zip\n",
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-4-2.zip\n",
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-3-2.zip\n",
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-1-2.zip\n",
      "https://huggingface.co/datasets/mesolitica/Malaysian-STT-Whisper/blob/main/prepared-pseudolabel-chunks-8-2.zip\n"
     ]
    }
   ],
   "source": [
    "multiprocessing(files, loop, cores = 10, returned = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "df750b0e",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
